草庐IT

C++ 宏算术

全部标签

c++ - C++ 算术 boost header 的使用

我一直在尝试使用一组模板来确定给定C++中两种原始类型的正确boost类型。这个想法是,如果您定义一个自定义数字模板,您可以使用它们来确定返回类型,例如,基于传递给模板的类的operator+函数。例如://CustomnumericclasstemplatestructComplex{Complex(Treal,Timag):r(real),i(imag){}Tr,i;//Otherimplementationstuff};//GenericarithmeticpromotiontemplatetemplatestructArithmeticPromotion{typedeftype

c++ - 使用移动赋值从算术运算符重载返回 const 值

假设我有以下最小示例类:#includeclassFoo{public:Foo()=default;Foo(constFoo&)=default;Foo(Foo&&)noexcept=default;Foo&operator=(constFoo&rhs){std::cout这会按预期打印move。现在根据EffectiveC++Item3,我应该从operator+返回constFoo以避免像a+b=c这样的构造,即://Toavoida+b=cconstFoooperator+(constFoo&rhs)const{}不幸的是,这突然开始调用复制赋值而不是移动赋值运算符。[我在Ubu

c++ - 定义常量时包括算术运算

所以我经常看到这样的东西:#definegf_PIf32(3.14159265358979323846264338327950288419716939937510)#definegf_PIhalff32(3.14159265358979323846264338327950288419716939937510*0.5)这意味着我每次在代码中使用gf_PIhalf时都会计算一半的PI值,对吗?直接写半个PI的值不是更好吗?做以下事情不是更好吗:#definegf_PIf32(3.14159265358979323846264338327950288419716939937510)const

C++,如何优化浮点算术运算?

我在x86架构上测试极限情况下的简单算术运算时观察到一个令人惊讶的行为:constdoublemax=9.9e307;//Nearstd::numeric_limits::max()constdoubleinit[]={max,max,max};constvalarraymyvalarray(init,3);constdoublemysum=myvalarray.sum();cout(在release模式下使用MSVC以及通过Codepad.org的gcc进行测试。MSVC的Debug模式将平均值(2)设置为#INF。)我希望平均值(2)等于平均值​​(1),但在我看来,C++内置除法

c++ - 算术 C++ 运算符

我刚刚在一次技术面试中被问到一个让我有点困惑的问题。问题如下:如果inti=-1,intj=-1,andintk=-1,然后我们运行以下行:++i&&++j&&++ki、j和k的新值是多少?我感到困惑的原因是,由于我们没有将此表达式分配给任何东西,因此and运算符似乎没有任何区别(只有增量运算符应该)。然而,运行一个简单的测试程序很快证明我错了。有人能给我解释一下吗,因为我以前从未见过这个练习。 最佳答案 这里的关键是&&短路了。因此,++i首先被求值。它递增i并返回新值,即0,因此不会计算表达式的其余部分。如果我没记错的话,这些值

c++ - C++ 中的无符号算术

我刚刚在做无符号算术时观察到一个奇怪的现象。由于环绕,预计b和-a具有相同的数字4294967286,但b的实际输出和-a分别是-10和4294967286。谁能帮忙给个提示?#includeintmain(){unsignedinta=10;intb=-a;std::couthttps://repl.it/repls/ExpertDrabOrganization 最佳答案 -a在unsigned中评估算术,并且将是一个大于的数std::numeric_limits::max().一元运算符-当应用于unsigned时type更像是

windows - 在 SYSTEMTIME 上执行算术运算

我有一个用SYSTEMTIME表示的时间值,我想从中加/减1小时并得到新获得的SYSTEMTIME。我希望转换应该注意加法/减法或月份变化或e1年变化的日期变化。如果有一些在SYSTEMTIME上做算术的windowsapi,有人可以帮我吗 最佳答案 如果您使用的是C#(或VB.NET或ASP.NET),则可以使用DateTimedt=DateTime.Now.AddHours(1);可以用负数减去:DateTimedt=DateTime.Now.AddHours(-1);已编辑:我从thispost中提取了一个答案Theysugg

c# - 字典c#的算术运算

我有这个字典对象:-DictionarylstTransList;此对象的值为|Key={Id}|Value={|QTY=4|PICKEDUP=2}|现在我想计算记录数,每条记录的QTY和PICKEDUP的差值,然后是QTY的总和,PICKEDUP的总和和差值的总和。有没有使用LINQ执行这些算术运算的有效方法?我算作:-inttotal_transactiondone=lstTransList.Count();对于QTY的总和,我想使用键将字典对象的值拆分为“QTY”和“PICKEDUP”,但不知道如何使用它。有什么建议吗??想用这样的东西:decimaltotal_tickets=

MySQL整数无符号算术问题?

MySQL(5.0.45)是否喜欢使用无符号数学进行奇怪的内部类型转换?我存储的是无符号整数,但在选择基本算术时,我得到了惊人的数字:mysql>createtablett(aintegerunsigned,bintegerunsigned,cfloat);QueryOK,0rowsaffected(0.41sec)mysql>insertintottvalues(215731,216774,1.58085);QueryOK,1rowaffected(0.00sec)mysql>selecta,b,cfromtt;+--------+--------+---------+|a|b|c|

ios - 为什么 GLSL 的算术函数在 iPad 上与在模拟器上产生如此不同的结果?

我目前正在寻找在iOS设备上运行的OpenGLES2.0片段着色器代码中的一些错误。代码在模拟器中运行良好,但在iPad上它有很大的问题,一些计算产生截然不同的结果,例如0.0在iPad和4013.17在模拟器上,所以我不是在谈论可能由一些舍入误差导致的微小差异。我注意到的一件事是,在iPad上,float1=pow(float2,2.0);可以产生与结果非常不同的结果float1=float2*float2;具体来说,当使用pow(x,2.0)时在包含较大负数的变量上,如-8,它似乎返回一个满足条件if(powResult的值.此外,两种操作的结果(pow(x,2.0)以及x*x)在